package are.web;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class ManejadorTotalizador {

	private db conexion = null;
	private Totalizador totalizador;
	public static final int CAMPO_NIC = 1;
	public static final int CAMPO_MEDIDOR = 2;
	public static final int CAMPO_MARCA = 3;
	
	
	public ManejadorTotalizador(db conexion) {
		super();
		this.conexion = conexion;
		this.setTotalizador(new Totalizador());
	}
	public ManejadorTotalizador(db conexion, Totalizador totalizador) {
		super();
		this.conexion = conexion;
		this.setTotalizador(totalizador);
	}
	public db getConexion() {
		return conexion;
	}
	public void setConexion(db conexion) {
		this.conexion = conexion;
	}
	public Totalizador getTotalizador() {
		return totalizador;
	}
	public void setTotalizador(Totalizador totalizador) {
		this.totalizador = totalizador;
	}
	
	
	public boolean add() throws SQLException{
		boolean result = false;

			String sql = "insert into totalizador (transformador,medidor,nic,marca," +
					"nis_rad,fecha_registro,recurso_registro," +
					"tipo_registro,latitud,longitud) values(?,?,?,?,?,sysdate(),?,?,?,?)";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, totalizador.getTransformador());
			pst.setString(2, totalizador.getMedidor());
			pst.setString(3, totalizador.getNic());
			pst.setString(4, totalizador.getMarca());
			pst.setString(5, totalizador.getNis_rad());
			pst.setString(6, totalizador.getRecurso());
			pst.setString(7, totalizador.getTipo());
			pst.setString(8, totalizador.getLatitud());
			pst.setString(9, totalizador.getLongitud());
			
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			
		
		return result;
	}
	
	public boolean update(String key) throws SQLException{
		boolean result = false;

			String sql = "update totalizador set transformador=?,medidor=?,nic=?,marca=?," +
					"nis_rad=?,recurso_registro=?," +
					"tipo_registro=?,latitud=?,longitud=? where id=?";
			
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, totalizador.getTransformador());
			pst.setString(2, totalizador.getMedidor());
			pst.setString(3, totalizador.getNic());
			pst.setString(4, totalizador.getMarca());
			pst.setString(5, totalizador.getNis_rad());
			pst.setString(6, totalizador.getRecurso());
			pst.setString(7, totalizador.getTipo());
			pst.setString(8, totalizador.getLatitud());
			pst.setString(9, totalizador.getLongitud());
			pst.setString(10, key);
			
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			
		return result;
	}
	public boolean remove(String key) throws SQLException {
		boolean result = false;

			String sql = "delete from totalizador where id=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			

		return result;	
	}
	
	
	public boolean existNic(String key) throws SQLException {
		boolean result = false;

			String sql = "select id from totalizador where nic = ?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				result = true;
			}
			rs.close();
			
		
		return result;	
	}
	
	public boolean existId(String key) throws SQLException {
		boolean result = false;

			String sql = "select id from totalizador where id = ?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				result = true;
			}
			rs.close();
			
		
		return result;	
	}
	
	public boolean FindForNic(String key) throws SQLException {
		boolean result = false;

			String sql = "select * from totalizador where nic=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				totalizador = new Totalizador();
				totalizador.setTransformador(rs.getString("transformador"));
				totalizador.setMedidor(rs.getString("medidor"));
				totalizador.setNic(rs.getString("nic"));
				totalizador.setMarca(rs.getString("marca"));
				totalizador.setNis_rad(rs.getString("nis_rad"));
				totalizador.setTipo(rs.getString("tipo_registro"));
				totalizador.setRecurso(rs.getString("recurso_registro"));
				totalizador.setLatitud(rs.getString("latitud"));
				totalizador.setLongitud(rs.getString("longitud"));
				totalizador.setFecha(rs.getString("fecha_registro"));
				totalizador.setId(rs.getString("id"));
				result = true;
			}
			rs.close();
			
		return result;	
	}
	public boolean FindForId(String key) throws SQLException {
		boolean result = false;

			String sql = "select * from totalizador where id=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				totalizador = new Totalizador();
				totalizador.setTransformador(rs.getString("transformador"));
				totalizador.setMedidor(rs.getString("medidor"));
				totalizador.setNic(rs.getString("nic"));
				totalizador.setMarca(rs.getString("marca"));
				totalizador.setNis_rad(rs.getString("nis_rad"));
				totalizador.setTipo(rs.getString("tipo_registro"));
				totalizador.setRecurso(rs.getString("recurso_registro"));
				totalizador.setLatitud(rs.getString("latitud"));
				totalizador.setLongitud(rs.getString("longitud"));
				totalizador.setFecha(rs.getString("fecha_registro"));
				totalizador.setId(rs.getString("id"));
				result = true;
			}
			rs.close();
			
		return result;	
	}
	
	public ArrayList<Totalizador> list() throws SQLException {
		ArrayList<Totalizador> totalizadores = new ArrayList<Totalizador>();
		
			String sql = "select * from totalizador order by transformador";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Totalizador totalizador = new Totalizador();
				totalizador.setTransformador(rs.getString("transformador"));
				totalizador.setMedidor(rs.getString("medidor"));
				totalizador.setNic(rs.getString("nic"));
				totalizador.setMarca(rs.getString("marca"));
				totalizador.setNis_rad(rs.getString("nis_rad"));
				totalizador.setTipo(rs.getString("tipo_registro"));
				totalizador.setRecurso(rs.getString("recurso_registro"));
				totalizador.setLatitud(rs.getString("latitud"));
				totalizador.setLongitud(rs.getString("longitud"));
				totalizador.setFecha(rs.getString("fecha_registro"));
				totalizador.setId(rs.getString("id"));
				totalizadores.add(totalizador);
			}
			rs.close();
		
		return totalizadores;
	}
	
	public ArrayList<Totalizador> list(int campo_filtro, String filtro) throws SQLException {
		ArrayList<Totalizador> totalizadores = new ArrayList<Totalizador>();

			String sql = "select * from totalizador ";
			
			switch(campo_filtro) {
			case CAMPO_NIC:
				sql += " where nic = '" + filtro + "'";
			break;
			case CAMPO_MEDIDOR:
				sql += " where medidor = '" + filtro + "'";
			break;
			case CAMPO_MARCA:
				sql += " where marca = '" + filtro + "'";
			break;
			}
			sql += " order by transformador";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Totalizador totalizador = new Totalizador();
				totalizador.setTransformador(rs.getString("transformador"));
				totalizador.setMedidor(rs.getString("medidor"));
				totalizador.setNic(rs.getString("nic"));
				totalizador.setMarca(rs.getString("marca"));
				totalizador.setNis_rad(rs.getString("nis_rad"));
				totalizador.setTipo(rs.getString("tipo_registro"));
				totalizador.setRecurso(rs.getString("recurso_registro"));
				totalizador.setLatitud(rs.getString("latitud"));
				totalizador.setLongitud(rs.getString("longitud"));
				totalizador.setFecha(rs.getString("fecha_registro"));
				totalizador.setId(rs.getString("id"));
				totalizadores.add(totalizador);
			}
			rs.close();
		
		return totalizadores;	
	}
	
	public ArrayList<Totalizador> list(String filtro) throws SQLException {
			if (filtro.isEmpty()) {
				throw new SQLException("Cadena de filtro no puede estar vacia");
			}
			
			ArrayList<Totalizador> totalizadores = new ArrayList<Totalizador>();

			String sql = "select * from totalizador ";
			sql += " where " + filtro ;		
			sql += " order by transformador";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Totalizador totalizador = new Totalizador();
				totalizador.setTransformador(rs.getString("transformador"));
				totalizador.setMedidor(rs.getString("medidor"));
				totalizador.setNic(rs.getString("nic"));
				totalizador.setMarca(rs.getString("marca"));
				totalizador.setNis_rad(rs.getString("nis_rad"));
				totalizador.setTipo(rs.getString("tipo_registro"));
				totalizador.setRecurso(rs.getString("recurso_registro"));
				totalizador.setLatitud(rs.getString("latitud"));
				totalizador.setLongitud(rs.getString("longitud"));
				totalizador.setFecha(rs.getString("fecha_registro"));
				totalizador.setId(rs.getString("id"));
				totalizadores.add(totalizador);
			}
			rs.close();
		
		return totalizadores;	
	}
	
	
	
}